package com.company.sendemo.basics.ayJavaEight.stream;

import java.io.*;

public class FileStream {
    public static void main(String[] args) throws IOException{
/**
 * 首先创建文件test.txt，并把给定的数字以二进制形式写进该文件，同时输出到控制台上。
 */
        fileStreamTest1();

        /**
         *  * fileStreamTest1以上代码由于是二进制写入，可能存在乱码，你可以使用以下代码实例来解决乱码问题：
         */
        fileStreamTest2();

    }

    public static void fileStreamTest1() {
        try {
            byte bWrite[] = {11, 21, 3, 40, 5};
            FileOutputStream fileOutputStream = new FileOutputStream("D:/project/test.txt");
            for (int i = 0; i < bWrite.length; i++) {
                fileOutputStream.write(bWrite[i]);
            }
            fileOutputStream.close();

            FileInputStream fileInputStream = new FileInputStream("test.txt");
            int available = fileInputStream.available();
            for (int i = 0; i < available; i++) {
                System.out.println((char) fileInputStream.read() + "  ");
            }
            fileInputStream.close();
        } catch (IOException e) {
            System.out.println("Exception");
        }
    }

    public static void fileStreamTest2() throws IOException{
        File file = new File("D:/project/test2.txt");
        FileOutputStream fop = new FileOutputStream(file);
        // 构建FileOutputStream对象,文件不存在会自动新建

        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        // 构建OutputStreamWriter对象,参数可以指定编码,默认为操作系统默认编码,windows上是gbk
        writer.append("中文输入");
        //写入到缓冲区
        writer.append("\r\n");
        //换行
        writer.append("English");
        //刷新缓存冲，写入到文件，如果下面已经没有写入的内容了，直接close也会写入
        writer.close();
        //关闭写入流，同时会把缓冲区内容写入文件，所以上面的注释掉
        fop.close();
        //关闭输出流，释放系统资源

        FileInputStream fip = new FileInputStream(file);
        //构建FileInputStream对象
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        //构建InputStreamReader对象，编码与写入相同
        StringBuffer sb = new StringBuffer();
        while (reader.ready()){
            sb.append((char) reader.read());
            //转成char加到StingBuffer对象中
        }
        System.out.println(sb.toString());
        reader.close();
        //关闭读取流
        fip.close();
        //关闭输入流，释放系统资源
    }
}
